<template>
  <div>
    <!--
        <div>
            <button @click="insertText">insert text</button>
            <button @click="printHtml">print html</button>
            <button @click="disable">disable</button>
        </div>   -->
    <div style="border: 1px solid #ccc; margin-top: 10px">
      <Toolbar
        :editor="editorRef"
        :defaultConfig="toolbarConfig"
        :mode="mode"
        style="border-bottom: 1px solid #ccc"
      />
      <Editor
        :defaultConfig="editorConfig"
        :mode="mode"
        v-model="contentHtml"
        style="height: 400px; overflow-y: hidden"
        @onCreated="handleCreated"
        @onChange="handleChange"
        @onDestroyed="handleDestroyed"
        @onFocus="handleFocus"
        @onBlur="handleBlur"
        @customAlert="customAlert"
        @customPaste="customPaste"
      />
    </div>

    <!--
        <div style="margin-top: 10px;">
            <textarea v-model="valueHtml" readonly style="width: 100%; height: 200px; outline: none;"></textarea>
        </div>
        -->
  </div>
</template>

<script>
import "@wangeditor/editor/dist/css/style.css";
import { onBeforeUnmount, ref, shallowRef, onMounted } from "vue";
import { Editor, Toolbar } from "@wangeditor/editor-for-vue";

// 接收父组件传递的值

export default {
  components: { Editor, Toolbar },
  props: {
    contentHtml: String,
    status: Boolean,
  },
  setup(props, content) {
    // 编辑器实例，必须用 shallowRef，重要！
    const editorRef = shallowRef();
    // 内容 HTML
    // const valueHtml = ref('<p>hello</p>')
    // 模拟 ajax 异步获取内容
    onMounted(() => {
      console.log("onMounted");
    });
    // 定义一个编辑器的工具栏
    const toolbarConfig = {};
    // 编辑器的配置
    const editorConfig = { MENU_CONF: {} };

    editorConfig.placeholder = "请输入内容";

    // 配置上传图片的响应函数
    editorConfig.MENU_CONF['uploadImage'] = {
      // 上传文件的url
      server: "http://192.168.182.140:8000/api/v1/task/upload/",
      // 单个文件的最大体积限制，默认为 5M
      maxFileSize: 5 * 1024 * 1024, // 5M
      // 选择文件时的类型限制，默认为 ['image/*'] 。如不想限制，则设置为 []
      allowedFileTypes: ["image/*"],
      // 超时时间，默认为 10 秒
      timeout: 5 * 1000, // 5 秒

      // 成功上传的回调函数 
      onSuccess(file, res){
        console.log("上传成功");
      }
    }



    // 组件销毁时，也及时销毁编辑器，重要！
    onBeforeUnmount(() => {
      const editor = editorRef.value;
      if (editor == null) return;
      editor.destroy();
    });
    // 编辑器回调函数
    const handleCreated = (editor) => {
      console.log("created", editor);
      editorRef.value = editor; // 记录 editor 实例，重要！
    };
    const handleChange = (editor) => {
      console.log("change:", editor.getHtml());
      // 把子组件的内容给父组件 
      content.emit("getWangEditorValue", editor.getHtml())
      // 设置编辑的状态：在查看的时候禁用， 在添加或者修改的时候是启用
      if (props.status) {
        enable();
      } else {
        disable();
      }
    };
    const handleDestroyed = (editor) => {
      console.log("destroyed", editor);
      editor.destroy();
    };
    const handleFocus = (editor) => {
      console.log("focus", editor);
    };
    const handleBlur = (editor) => {
      console.log("blur", editor);
    };
    const customAlert = (info, type) => {
      alert(`【自定义提示】${type} - ${info}`);
    };
    const customCopy = (editor, event, callback) => {
      console.log("ClipboardEvent 复制事件对象", event);
      // 自定义插入内容
      //editor.insertText("xxx");
      // 返回值（注意，vue 事件的返回值，不能用 return）
      callback(false); // 返回 false ，阻止默认粘贴行为
      // callback(true) // 返回 true ，继续默认的粘贴行为
    };
    const customPaste = (editor, event, callback) => {
      console.log("ClipboardEvent 粘贴事件对象", event);
      // 自定义插入内容
      //editor.insertText("xxx");
      // 返回值（注意，vue 事件的返回值，不能用 return）
      callback(false); // 返回 false ，阻止默认粘贴行为
      // callback(true) // 返回 true ，继续默认的粘贴行为
    };
    const insertText = () => {
      // const editor = editorRef.value
      // if (editor == null) return
      // editor.insertText('hello world')
    };
    const printHtml = () => {
      const editor = editorRef.value;
      if (editor == null) return;
      console.log(editor.getHtml());
    };

    const disable = () => {
      const editor = editorRef.value;
      if (editor == null) return;
      editor.disable();
    };

    const enable = () => {
      const editor = editorRef.value;
      if (editor == null) return;
      editor.enable();
    };
    return {
      editorRef,
      mode: "default",
      toolbarConfig,
      editorConfig,
      handleCreated,
      handleChange,
      handleDestroyed,
      handleFocus,
      handleBlur,
      customAlert,
      customPaste,
      insertText,
      printHtml,
      props,
    };
  },
};
</script>
